home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Frameworks / TransSkel 3.24 / Demos / Pascal Demos / Button / Modal2.p < prev    next >
Text File  |  1996-01-24  |  3KB  |  120 lines

  1. unit Modal2;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types, MixedMode, QuickDraw, Windows, Dialogs, OSUtils, TransSkel, ButtonGlobals;
  7.  
  8.  
  9.     procedure DoModal2;
  10.  
  11. implementation
  12.  
  13.     const
  14.  
  15.         findItem = 1;
  16.         cancelItem = 2;
  17.         staticTextItem = 3;
  18.         editTextItem = 4;
  19.         outlineItem = 5;
  20.  
  21.  
  22.     var
  23.  
  24.         defaultButton: Integer;
  25.  
  26.         drawProc: UserItemUPP;
  27.  
  28. {--------------------------------------------------------------------}
  29. { Dialog 2 procedures }
  30. {--------------------------------------------------------------------}
  31.  
  32. procedure OutlineButton (dlog: DialogPtr; item: Integer);
  33. begin
  34.     SkelDrawButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
  35. end;
  36.  
  37.  
  38. procedure SetDefaultButton (dlog: DialogPtr; item: Integer);
  39. var
  40.     r: Rect;
  41. begin
  42.     defaultButton := item;
  43.     SkelGetDlogRect(dlog, defaultButton, r);    { get button rect }
  44.     InsetRect(r, -4, -4);                        { expand it }
  45.     SkelSetDlogRect(dlog, outlineItem, r);        { use for outline item }
  46.     SkelSetDlogProc(dlog, outlineItem, drawProc);
  47.     SkelDrawButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
  48. end;
  49.  
  50.  
  51. procedure DoModal2;
  52. var
  53.     filter: ModalFilterProcPtr;
  54.     dlog: DialogPtr;
  55.     savePort: GrafPtr;
  56.     item: Integer;
  57.     newDefault: Integer;
  58.     str: Str255;
  59.     loop: Boolean;
  60. begin
  61.     dlog := GetNewDialog(modal2Res, nil, WindowPtr(-1));
  62.     if (dlog = DialogPtr(nil)) then
  63.         begin
  64.             SysBeep(1);
  65.             exit(DoModal2);
  66.         end;
  67.  
  68.     SkelPositionWindow(dlog, skelPositionOnMainDevice, horizRatio, vertRatio);
  69.  
  70.     GetPort(savePort);
  71.     SetPort(dlog);
  72.  
  73.     {
  74.         Set up a variable to point to the outline drawing procedure.  For 68K code
  75.         this is just a direct pointer to OutlineButton().  For PowerPC code it is a
  76.         routine descriptor into which the address of OutlineButton() is stuffed.
  77.     }
  78.  
  79.     drawProc := NewUserItemProc (@OutlineButton);
  80.  
  81.     { should really check whether or not drawProc is nil! }
  82.  
  83.     SetDefaultButton(dlog, cancelItem);
  84.  
  85.     ShowWindow(dlog);
  86.  
  87.     loop := true;
  88.     while (loop) do
  89.         begin
  90.             filter := SkelDlogFilter(nil, true);
  91.             SkelDlogDefaultItem(defaultButton);
  92.             SkelDlogCancelItem(cancelItem);
  93.             SkelDlogTracksCursor(true);
  94.             ModalDialog(filter, item);
  95.             SkelRmveDlogFilter;
  96.             if ((item = findItem) or (item = cancelItem)) then
  97.                 loop := false
  98.             else
  99.                 begin
  100.                     SkelGetDlogStr(dlog, editTextItem, str);
  101.                     if (length(str) > 0) then
  102.                         newDefault := findItem
  103.                     else
  104.                         newDefault := cancelItem;
  105.                     if (newDefault <> defaultButton) then
  106.                         begin
  107.                             SkelEraseButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
  108.                             SetDefaultButton(dlog, newDefault);
  109.                         end;
  110.                 end;
  111.         end;
  112.  
  113.  
  114.     DisposeRoutineDescriptor (drawProc);
  115.     DisposeDialog(dlog);
  116.     SetPort(savePort);
  117.  
  118. end;
  119.  
  120. end.